package com.reebake.ideal.storage.entity;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

 /**
 * 文件记录
 * 
 */
@Schema(name = "文件记录", description = "")
@TableName("idl_file_detail")
@Data
public class FileDetail implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;

    /** 文件id */
    @Schema(name = "文件id", description = "")
    @TableId
    private String fileDetailId;

    /** 文件访问地址 */
    @Schema(name = "文件访问地址", description = "")
    private String url;

    /** 原始文件名 */
    @Schema(name = "原始文件名", description = "")
    private String originalFilename;

    /** 文件名称 */
    @Schema(name = "文件名称", description = "")
    private String filename;

    /** 基础存储路径 */
    @Schema(name = "基础存储路径", description = "")
    private String basePath;

    /** 存储路径 */
    @Schema(name = "存储路径", description = "")
    private String path;

    /** 文件大小，单位字节 */
    @Schema(name = "文件大小，单位字节", description = "")
    private Integer size;

    /** 文件扩展名 */
    @Schema(name = "文件扩展名", description = "")
    private String ext;

    /** MIME类型 */
    @Schema(name = "MIME类型", description = "")
    private String contentType;

    /** 存储平台 */
    @Schema(name = "存储平台", description = "")
    private String platform;

    /** 缩略图访问路径 */
    @Schema(name = "缩略图访问路径", description = "")
    private String thUrl;

    /** 缩略图名称 */
    @Schema(name = "缩略图名称", description = "")
    private String thFilename;

    /** 缩略图大小，单位字节 */
    @Schema(name = "缩略图大小，单位字节", description = "")
    private Long thSize;

    /** 缩略图MIME类型 */
    @Schema(name = "缩略图MIME类型", description = "")
    private String thContentType;

    /** 文件所属对象id */
    @Schema(name = "文件所属对象id", description = "")
    private String objectId;

    /** 文件所属对象类型，例如用户头像，评价图片 */
    @Schema(name = "文件所属对象类型，例如用户头像，评价图片", description = "")
    private String objectType;

    /** 文件元数据 */
    @Schema(name = "文件元数据", description = "")
    private String metadata;

    /** 文件用户元数据 */
    @Schema(name = "文件用户元数据", description = "")
    private String userMetadata;

    /** 缩略图元数据 */
    @Schema(name = "缩略图元数据", description = "")
    private String thMetadata;

    /** 缩略图用户元数据 */
    @Schema(name = "缩略图用户元数据", description = "")
    private String thUserMetadata;

    /** 附加属性 */
    @Schema(name = "附加属性", description = "")
    private String attr;

    /** 文件ACL */
    @Schema(name = "文件ACL", description = "")
    private String fileAcl;

    /** 缩略图文件ACL */
    @Schema(name = "缩略图文件ACL", description = "")
    private String thFileAcl;

    /** 哈希信息 */
    @Schema(name = "哈希信息", description = "")
    private String hashInfo;

    /** 上传ID，仅在手动分片上传时使用 */
    @Schema(name = "上传ID，仅在手动分片上传时使用", description = "")
    private String uploadId;

    /** 上传状态，仅在手动分片上传时使用，1初始化完成，2上传完成 */
    @Schema(name = "上传状态，仅在手动分片上传时使用，1初始化完成，2上传完成", description = "")
    private Integer uploadStatus;

    /** 创建时间 */
    @Schema(name = "创建时间", description = "")
    private Date createTime;

    /** 删除标识 */
    @Schema(name = "删除标识", description = "")
    @TableLogic
    private Boolean deleteFlag;

    /** 租户号 */
    @Schema(name = "租户号", description = "")
    private String tenantId;

    /** 乐观锁 */
    @Schema(name = "乐观锁", description = "")
    private Integer revision;

    /** 创建人 */
    @Schema(name = "创建人", description = "")
    @TableField(fill = FieldFill.INSERT)
    private String createdBy;

    /** 创建时间 */
    @Schema(name = "创建时间", description = "")
    @TableField(fill = FieldFill.INSERT)
    private Date createdTime;

    /** 更新人 */
    @Schema(name = "更新人", description = "")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updatedBy;

    /** 更新时间 */
    @Schema(name = "更新时间", description = "")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updatedTime;

}